import { HttpParams, HttpRequest } from '@angular/common/http';

/**
 * 拦截器配置接口
 */
export interface InterceptorConfig {
  ignoreLoading?: boolean;
  ignoreErrors?: boolean;
  ignoreVersionConflict?: boolean;
  resendRequest?: boolean;
}

/**
 * 创建带有拦截器配置的 HTTP 参数
 * @param config 拦截器配置
 * @param params 额外的 HTTP 参数
 * @returns HttpParams 对象
 */
export function createHttpParamsWithConfig(
  config: InterceptorConfig, 
  params?: { [param: string]: string | string[] }
): HttpParams {
  const allParams = {
    ...params,
    interceptorConfig: JSON.stringify(config)
  };
  
  return new HttpParams({ fromObject: allParams });
}


/**
 * 默认拦截器配置
 */
export const DEFAULT_INTERCEPTOR_CONFIG: InterceptorConfig = {
  ignoreLoading: false,
  ignoreErrors: false,
  ignoreVersionConflict: false,
  resendRequest: false
};

/**
 * 内部 URL 前缀（不显示加载状态）
 */
const INTERNAL_URL_PREFIXES = [
  '/api/auth/token',
  '/api/rpc'
];

/**
 * 从 HTTP 请求中获取拦截器配置
 * @param req HTTP 请求
 * @returns 拦截器配置
 */
export function getInterceptorConfig(req: HttpRequest<unknown>): InterceptorConfig {
  // 检查请求参数中是否有自定义配置
  const customConfig = req.params.get('interceptorConfig');
  let config: InterceptorConfig = DEFAULT_INTERCEPTOR_CONFIG;
  
  if (customConfig) {
    try {
      config = { ...DEFAULT_INTERCEPTOR_CONFIG, ...JSON.parse(customConfig) };
    } catch (error) {
      console.warn('Invalid interceptor config:', customConfig);
    }
  }
  
  // 内部 URL 自动忽略加载状态
  if (isInternalUrl(req.url)) {
    config.ignoreLoading = true;
  }
  
  return config;
}

/**
 * 检查是否为内部 URL
 * @param url 请求 URL
 * @returns 是否为内部 URL
 */
function isInternalUrl(url: string): boolean {
  return INTERNAL_URL_PREFIXES.some(prefix => url.startsWith(prefix));
}


